// 以下代码是从.class文件反编译重建的源代码
// 使用IntelliJ IDEA (由FernFlower反编译器提供支持)

// 定义包路径，属于驾校模块的web控制器
package com.ruoyi.web.controller.jiaxiao;

// 导入所需的类
import com.ruoyi.common.annotation.Log;                   // 日志注解
import com.ruoyi.common.core.controller.BaseController;   // 基础控制器类
import com.ruoyi.common.core.domain.AjaxResult;           // 统一响应结果类
import com.ruoyi.common.core.page.TableDataInfo;          // 表格数据分页结果类
import com.ruoyi.common.enums.BusinessType;               // 业务操作类型枚举
import com.ruoyi.common.utils.SecurityUtils;              // 安全工具类，用于获取当前用户信息
import com.ruoyi.common.utils.poi.ExcelUtil;              // Excel处理工具类
import com.ruoyi.system.domain.JxStudent;                 // 学员实体类
import com.ruoyi.system.service.IJxStudentService;        // 学员服务接口
import java.util.Iterator;                                // 迭代器类
import java.util.List;                                    // 集合类
import org.springframework.beans.factory.annotation.Autowired; // 自动注入注解
import org.springframework.security.access.prepost.PreAuthorize; // 权限校验注解
import org.springframework.web.bind.annotation.DeleteMapping;   // HTTP DELETE请求注解
import org.springframework.web.bind.annotation.GetMapping;      // HTTP GET请求注解
import org.springframework.web.bind.annotation.PathVariable;    // 路径变量注解
import org.springframework.web.bind.annotation.PostMapping;     // HTTP POST请求注解
import org.springframework.web.bind.annotation.PutMapping;      // HTTP PUT请求注解
import org.springframework.web.bind.annotation.RequestBody;     // 请求体注解
import org.springframework.web.bind.annotation.RequestMapping;  // 请求映射注解
import org.springframework.web.bind.annotation.RequestParam;    // 请求参数注解
import org.springframework.web.bind.annotation.RestController;  // 标识为REST控制器
import org.springframework.web.multipart.MultipartFile;         // 文件上传类

// 声明为REST控制器，返回JSON格式数据
@RestController
// 定义基础请求路径，所有接口都以/jiaxiao/student开头
@RequestMapping({"/jiaxiao/student"})
// 学员控制器，继承基础控制器
public class JxStudentController extends BaseController {
    // 自动注入学员服务接口的实现类
    @Autowired
    private IJxStudentService jxStudentService;

    // 无参构造方法
    public JxStudentController() {
    }

    // 权限校验：只有拥有"jiaxiao:student:list"权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:student:list')")
    // 处理GET请求，路径为/list
    @GetMapping({"/list"})
    // 查询学员列表
    public TableDataInfo list(JxStudent query) {
        // 开启分页功能
        this.startPage();
        // 调用服务层方法查询学员列表
        List<JxStudent> list = this.jxStudentService.selectJxStudentList(query);
        // 将查询结果封装成分页表格数据并返回
        return this.getDataTable(list);
    }

    // 权限校验：只有拥有"jiaxiao:student:query"权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:student:query')")
    // 处理GET请求，路径为/{studentId}，{studentId}为学员ID路径参数
    @GetMapping({"/{studentId}"})
    // 根据学员ID查询学员详情
    public AjaxResult getInfo(@PathVariable Long studentId) {
        // 调用服务层方法查询详情，并封装成成功响应结果返回
        return this.success(this.jxStudentService.selectJxStudentById(studentId));
    }

    // 权限校验：只有拥有"jiaxiao:student:add"权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:student:add')")
    // 日志注解：记录操作标题为"学员"，业务类型为插入
    @Log(
            title = "学员",
            businessType = BusinessType.INSERT
    )
    // 处理POST请求，路径为基础路径
    @PostMapping
    // 新增学员
    public AjaxResult add(@RequestBody JxStudent entity) {
        // 调用服务层方法新增学员，并将结果封装成响应返回
        return this.toAjax(this.jxStudentService.insertJxStudent(entity));
    }

    // 权限校验：只有拥有"jiaxiao:student:edit"权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:student:edit')")
    // 日志注解：记录操作标题为"学员"，业务类型为更新
    @Log(
            title = "学员",
            businessType = BusinessType.UPDATE
    )
    // 处理PUT请求，路径为基础路径
    @PutMapping
    // 修改学员信息
    public AjaxResult edit(@RequestBody JxStudent entity) {
        // 调用服务层方法更新学员信息，并将结果封装成响应返回
        return this.toAjax(this.jxStudentService.updateJxStudent(entity));
    }

    // 权限校验：只有拥有"jiaxiao:student:remove"权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:student:remove')")
    // 日志注解：记录操作标题为"学员"，业务类型为删除
    @Log(
            title = "学员",
            businessType = BusinessType.DELETE
    )
    // 处理DELETE请求，路径为/{studentIds}，{studentIds}为学员ID数组路径参数
    @DeleteMapping({"/{studentIds}"})
    // 批量删除学员
    public AjaxResult remove(@PathVariable Long[] studentIds) {
        // 调用服务层方法批量删除学员，并将结果封装成响应返回
        return this.toAjax(this.jxStudentService.deleteJxStudentByIds(studentIds));
    }

    // 权限校验：只有拥有"jiaxiao:student:edit"权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:student:edit')")
    // 日志注解：记录操作标题为"学员状态变更"，业务类型为更新
    @Log(
            title = "学员状态变更",
            businessType = BusinessType.UPDATE
    )
    // 处理PUT请求，路径为/changeStatus/{studentId}
    @PutMapping({"/changeStatus/{studentId}"})
    // 变更学员状态
    public AjaxResult changeStatus(@PathVariable Long studentId,
                                   @RequestParam String toStatus,
                                   @RequestParam(required = false) String remark) {
        // 获取当前操作的用户名
        String operator = SecurityUtils.getUsername();
        // 调用服务层方法变更状态，并将结果封装成响应返回
        return this.toAjax(this.jxStudentService.changeStatus(studentId, toStatus, operator, remark));
    }

    // 权限校验：只有拥有"jiaxiao:student:export"权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:student:export')")
    // 日志注解：记录操作标题为"学员"，业务类型为导出
    @Log(
            title = "学员",
            businessType = BusinessType.EXPORT
    )
    // 处理POST请求，路径为/export
    @PostMapping({"/export"})
    // 导出学员数据为Excel
    public AjaxResult export(JxStudent query) {
        // 查询需要导出的学员列表
        List<JxStudent> list = this.jxStudentService.selectJxStudentList(query);
        // 创建Excel工具类实例
        ExcelUtil<JxStudent> util = new ExcelUtil(JxStudent.class);
        // 导出Excel并返回
        return util.exportExcel(list, "学员数据");
    }

    // 权限校验：只有拥有"jiaxiao:student:import"权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:student:import')")
    // 日志注解：记录操作标题为"学员"，业务类型为导入
    @Log(
            title = "学员",
            businessType = BusinessType.IMPORT
    )
    // 处理POST请求，路径为/importData
    @PostMapping({"/importData"})
    // 导入Excel中的学员数据
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
        // 创建Excel工具类实例
        ExcelUtil<JxStudent> util = new ExcelUtil(JxStudent.class);
        // 从上传的文件中读取学员数据列表
        List<JxStudent> list = util.importExcel(file.getInputStream());
        // 记录成功导入的数量
        int success = 0;

        // 遍历学员数据列表
        for(Iterator var6 = list.iterator(); var6.hasNext(); ++success) {
            JxStudent s = (JxStudent)var6.next();
            // 如果updateSupport为true则更新已有数据，否则新增
            if (updateSupport) {
                this.jxStudentService.updateJxStudent(s);
            } else {
                this.jxStudentService.insertJxStudent(s);
            }
        }

        // 返回导入成功的数量
        return AjaxResult.success("导入成功" + success + "条");
    }

    // 处理POST请求，路径为/importTemplate
    @PostMapping({"/importTemplate"})
    // 下载学员数据导入模板
    public AjaxResult importTemplate() {
        // 创建Excel工具类实例
        ExcelUtil<JxStudent> util = new ExcelUtil(JxStudent.class);
        // 生成并返回导入模板
        return util.importTemplateExcel("学员数据");
    }
}